#include "protocolo_NIPC.h"

/*lo unico no testeado es el envio, pero el mismo no supone 
ningun codigo que pueda generar problemas. Este codigo esta 
vinculado a funciones que se encuentran en la carpeta:
Sockets cliente - servidor*/

int cargarEstructura(NIPC* paquete,int id,char*mensaje){

	uint16_t tamanio;
	paquete->payloadDescriptor = id;
    paquete->payloadLength = strlen(mensaje);
    tamanio = paquete->payloadLength;
    paquete->mensaje = malloc(sizeof(char)*tamanio);
    memcpy(paquete->mensaje,mensaje,tamanio);
	return 0;
}

/*______________________________________________________________________________________*/

int serializar_NIPC(NIPC paquete,char*buffer){

	memcpy(buffer,&paquete.payloadDescriptor,sizeof(uint8_t));

	memcpy(buffer + sizeof(uint8_t),&paquete.payloadLength,sizeof(uint16_t));

	memcpy(buffer + sizeof(uint8_t)+sizeof(uint16_t),paquete.mensaje,paquete.payloadLength);

	return 0;
}

/*______________________________________________________________________________________*/

int enviarNIPC(char*buffer,int tamanio,int socketNIPC){ //sirve para el handshake tambien

	int resultado;


	resultado = enviarDatos(buffer,tamanio,socketNIPC);

			if(resultado == 0){
			//	printf("Envio Exitoso\n");
				return 0;
			}
			else{
				printf("Fallo el envio del Payload\n");
				return 1;
			}

	}

/*______________________________________________________________________________________*/

int recibirNIPC(char*buffer,int socketNIPC){

	int resultado;

	resultado = recibirDatos(buffer,socketNIPC);

			if(resultado > 0){
				//printf("Datos recibidos\n");
				return 0;
			}
			else{
				printf("Fallo la recepcion del payload\n");
				return 1;
			}

}

